package com.llb666.shop.user.domain.repository;

import com.llb666.shop.user.domain.entity.UserAddress;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;
import java.util.concurrent.CompletableFuture;

/**
 * 用户地址 Repository
 *
 * @author llb666
 */
public interface UserAddressRepository {

    /**
     * 根据用户Id查询用户收货地址列表.
     *
     * @param userId 用户Id
     * @return 用户收货地址列表.
     */
    List<UserAddress> selectByUserId(String userId);

    /**
     * 新增用户收货地址.
     *
     * @param userAddress 用户收货地址.
     */
    void addUserAddress(UserAddress userAddress);

    /**
     * 更新用户收货地址.
     *
     * @param userAddress 用户收货地址
     */
    void updateUserAddress(UserAddress userAddress);

    /**
     * 根据用户id以及用户收货地址Id删除用户收货地址.
     *
     * @param userId    用户Id
     * @param addressId 用户收货地址Id
     */
    void deleteByUserIdAndAddressId(String userId, String addressId);

    /**
     * 设置收货地址为非默认.
     *
     * @param userId    用户id
     * @param addressId 用户收货地址Id
     */
    void updateUserAddressToBeNotDefault(String userId, String addressId);

    /**
     * 设置默认收货地址,
     *
     * @param userId    用户id
     * @param addressId 用户收货地址Id
     */
    void updateUserAddressToBeDefault(String userId, String addressId);

    /**
     * 根据用户和收货地址id查询用户收货地址.
     *
     * @param userId    用户id
     * @param addressId 用户收货地址Id
     * @return 用户收货地址
     */
    UserAddress selectByUserIdAndAddressId(String userId, String addressId);

}
